/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modulo1;

import Modelo.NovedadGenerica;
import Modelo.ReporteNovedad;
import Modelo.ComunidadUniversitaria;
import Modelo.DAL.Novedad_DAO;
import Modelo.Posee;
import Modelo.Tiene;
import Modelo.EsImplicado;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.json.JSONObject;
import java.util.List;
import java.util.*;
import java.text.SimpleDateFormat;

/**
 *
 * @author miguel474
 */
public class ModificarReporteAction extends org.apache.struts.action.Action {
    /* forward name="success" path="" */

    static final String SUCCESS = "success";
    static final String FAILURE = "failure";

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        ModificarReporteForm formBean = (ModificarReporteForm) form;
        String reporteId = formBean.getId_reporte();
        int id_gen = Integer.parseInt(formBean.getNov_gen());
        int id_esp = Integer.parseInt(formBean.getNov_esp());
        String fecha_suceso = formBean.getFecha_suceso();
        String hora_suceso = formBean.getHora_suceso();
        String minutos_suceso = formBean.getMinutos_suceso();
        String meridiano = formBean.getMeridiano();
        String agrega = formBean.getAgrega();
        String via = formBean.getVia();
        String sede = formBean.getSede();
        String ubicacion = formBean.getUbicacion();
        String[] old_cis = formBean.getOld_cis().split(":");
        String[] pisos = formBean.getPisos();
        String[] campos = formBean.getCampos();
        String[] names = formBean.getNames();
        String[] lNames = formBean.getlNames();
        String[] nacs = formBean.getNacs();
        String[] cedulas = formBean.getCedulas();
        String[] telefonos = formBean.getTelefonos();
        String[] dens = formBean.getDens();
        String[] agr = formBean.getAgr();
        String[] ind = formBean.getInd();
        String[] test = formBean.getTest();
        String tiempo_suceso = fecha_suceso + " " + hora_suceso + ":" + minutos_suceso + " " + meridiano;
        String desc = formBean.getDescripcion();
        List<ComunidadUniversitaria> implicados = new ArrayList<ComunidadUniversitaria>();

        //Agrega el reporte a la bd
        ReporteNovedad reporte = new ReporteNovedad();
        reporte.setAgrega(agrega);
        reporte.setVia(via);
        reporte.setDescripcion(desc);
        SimpleDateFormat formato = new SimpleDateFormat("dd-MM-yy hh:mm a");
        Calendar cal = Calendar.getInstance();
        //reporte.setFechaSuceso(formato.parse(tiempo_suceso));
        reporte.setReporteNovedad(Integer.parseInt(reporteId));
        Modelo.DAL.ReporteNovedad_DAO.actualizarReporte(reporte);

        // Asocia el Reporte a su Ubicación, si es un edificio registra los pisos donde
        // ocurrio el suceso.
        Modelo.DAL.ReporteNovedad_DAO.updateEspacioReporte(reporteId, ubicacion, sede, pisos);
/**
        //Crea la lista con los datos de los implicados (los agrega a la BD en caso de que no existan
        for (int i = 0; i < cedulas.length; i++) {
            String nac = nacs[i];
            String num_cedula = cedulas[i];
            String cedula = nac + "-" + num_cedula;
            if (cedula.length() > 2) {
                ComunidadUniversitaria imp = new ComunidadUniversitaria();
                imp.setCi(cedula);
                imp.setNombre1(names[i]);
                imp.setApellido1(lNames[i]);
                if (telefonos[i] != null && !telefonos[i].isEmpty()) {
                    imp.setTelefono(Long.parseLong(telefonos[i]));
                }
                implicados.add(imp);
                if (i < old_cis.length) {
                    Modelo.DAL.ComunidadUniversitaria_DAO.actualizarComunidadUniversitaria(old_cis[i], imp);
                }else{
                    Modelo.DAL.ComunidadUniversitaria_DAO.insertarComunidadUniversitaria(imp);
                }
            }
        }

        //Borro la lista de implicados para volverla a llenar
        Modelo.DAL.EsImplicado_DAO.BorrarImplicados(reporteId);

        //Utiliza la lista antes llenada para registrar su grado de implicacion.
        for (int i = 0; i < implicados.size(); i++) {
            EsImplicado registro = new EsImplicado();
            ComunidadUniversitaria imp = implicados.get(i);
            registro.setCi(imp.getCi());
            registro.setReporteNovedad(Integer.parseInt(reporteId));
            String nivel = "";
            int pos = i;
            if (dens != null) {
                for (int j = 0; j < dens.length; j++) {
                    if (Integer.parseInt(dens[j]) == pos) {
                        nivel += "D";
                    }
                }
            }
            if (agr != null) {
                for (int j = 0; j < agr.length; j++) {
                    if (Integer.parseInt(agr[j]) == pos) {
                        nivel += "A";
                    }
                }
            }
            if (ind != null) {
                for (int j = 0; j < ind.length; j++) {
                    if (Integer.parseInt(ind[j]) == pos) {
                        nivel += "I";
                    }
                }
            }
            if (test != null) {
                for (int j = 0; j < test.length; j++) {
                    if (Integer.parseInt(test[j]) == pos) {
                        nivel += "T";
                    }
                }
            }
            registro.setTipoImplicado(nivel);
            Modelo.DAL.EsImplicado_DAO.agregarEsImplicado(registro);
        }

        // Le da valor a los campos
        List<Integer> campos_gen = Modelo.DAL.Pertenece_DAO.getCamposNovedadGen(id_gen);
        int offset = 0;
        for (int i = 0; i < campos_gen.size(); i++) {
            Posee pos = new Posee();
            pos.setNovedadGen(id_gen);
            pos.setCampoNovedad(campos_gen.get(i));
            pos.setReporte(Integer.parseInt(reporteId));
            pos.setValor(campos[i]);
            Modelo.DAL.PoseeTiene_DAO.actualizarPosee(pos);
            offset++;
        }

        if (id_esp != -1) {
            List<Integer> campos_esp = Modelo.DAL.Pertenece_DAO.getCamposNovedadEsp(id_esp);
            for (int i = 0; i < campos_esp.size(); i++) {
                Tiene tien = new Tiene();
                tien.setNovedadEsp(id_esp);
                tien.setCampoNovedad(campos_esp.get(i));
                tien.setReporte(Integer.parseInt(reporteId));
                tien.setValor(campos[(i + offset)]);
                Modelo.DAL.PoseeTiene_DAO.actualizarTiene(tien);
            }
        }

*/

        return mapping.findForward(SUCCESS);
    }
}
